package com.zb.mobile.network.service;

import com.zb.entity.AccounLoginInfo;
import com.zb.entity.AccountLoginToken;
import com.zb.exception.SMSException;
import com.zb.mobile.NetworkMobileEmpVo;
import com.zb.mobile.NetworkRegisterAccountVo;
import com.zb.mobile.UserMobileInfoVo;
import com.zb.result.PageUtil;
import com.zb.vo.LoginVo;
import com.zb.vo.UserContactVo;
import com.zb.vo.UserPasswordVo;

import javax.security.auth.login.LoginException;
import java.util.Map;

/**
 * @Author WEN
 * @Date 2023/11/17 0017
 **/
public interface ConNetworkAccountMobileService {

    /**
     * 服务商注册账号
     * @param registerAccountVo
     */
    void register(NetworkRegisterAccountVo registerAccountVo) throws SMSException;

    /**
     * 服务商登录
     *
     * @param loginVo
     * @return
     */
    AccountLoginToken login(LoginVo loginVo) throws SMSException, LoginException;

    /**
     * 服务商刷新登录token
     * @param refreshToken
     * @return
     */
    AccountLoginToken refreshToken(String refreshToken) throws LoginException;

    /**
     * 修改登录页面的密码
     * @param userPasswordVo
     */
    void logInRestPwd(UserPasswordVo userPasswordVo) throws SMSException;

    /**
     * 修改密码
     * @param accountId 账号ID
     * @param userPasswordVo
     */
    void updatePwd(Long accountId, UserPasswordVo userPasswordVo) throws SMSException;

    /**
     * 根据账号ID获取账号所属商家信息
     * @param loginInfo 登录信息
     */
    NetworkMobileEmpVo getByAccountId(AccounLoginInfo loginInfo);

    /**
     * 根据服务商编码选择服务商
     * @param loginInfo 登录信息
     * @param networkCode 服务商编码
     */
    void getNetwork(AccounLoginInfo loginInfo, String networkCode);

    /**
     * 获取当前登录账号信息
     * @param loginInfo
     * @return
     */
    Object getAccountInfo(AccounLoginInfo loginInfo);


    /**
     * 检查是否已绑定手机号
     * @param accountId 账号ID
     * @return
     */
    Object checkBindingPhone(Long accountId);

    /**
     * 编辑个人资料
     * @param accountId 账号ID
     * @param infoVo
     */
    void updateNetworkEmpInfo(Long accountId, UserMobileInfoVo infoVo);

    /**
     * 绑定或换绑手机号
     * @param accountId 账号ID
     * @param phone 手机号
     * @param code 验证码
     */
    void bindingPhone(Long accountId, String phone, String code) throws SMSException;

    /**
     * 新增或修改服务人员地址
     * @param loginInfo 登录信息
     * @param networkEmpaddress 服务人员地址
     */
    void saveNetworkEmpaddress(AccounLoginInfo loginInfo, UserContactVo networkEmpaddress);

    /**
     * 获取服务人员地址列表
     * @param networkEmpId 服务人员ID
     * @param pageUtil 分页对象
     * @return
     */
    Map<String, Object> getNetworkEmpAddressList(Long networkEmpId, PageUtil pageUtil);

    /**
     * 根据地址ID获取地址信息
     * @param networkEmpAddressId 服务人员地址ID
     * @return
     */
    UserContactVo getNetworkEmpAddressDetail(Long networkEmpAddressId);

    /**
     * 根据地址ID删除地址信息
     * @param networkEmpAddressId 服务人员地址ID
     */
    void deleteNetworkEmpAddress(Long networkEmpAddressId);

    /**
     * 注销账号
     * @param loginInfo
     */
    void cancelAccount(AccounLoginInfo loginInfo);

}
